package com.qf.servlet;
import com.alibaba.fastjson.JSON;
import com.qf.dao.ParkDao;
import com.qf.dao.impl.ParkDaoImpl;
import com.qf.entity.Park;
import com.qf.service.ParkService;
import com.qf.service.impl.ParkServiceImpl;
import com.qf.utils.JsonUtils;
import com.qf.utils.ResultVo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

@WebServlet(name = "ParkServlet",urlPatterns ="/parkServlet")
public class ParkServlet extends BaseServlet{
    private ParkDao parkDao = new ParkDaoImpl();
    private ParkService parkService = new ParkServiceImpl();

    public void   selectPark(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ParseException {
        /** 获取前端传递的参数：
         *
         *
         */
        String customerPhone1 = request.getParameter("customerPhone");
        //这个是为了避免NumberFormat异常（给一个可能为null的数据进行强转，他会出现这个异常）
        // 所以这边需要给他判断,避免给一个空值进行强转，然后报了这个异常
        Integer  customerPhone =(customerPhone1 ==null ||"".equals(customerPhone1)) ? null :Integer.parseInt(customerPhone1);

        String status1 = request.getParameter("status");
        //这个是为了避免NumberFormat异常（给一个可能为null的数据进行强转，他会出现这个异常）
        // 所以这边需要给他判断,避免给一个空值进行强转，然后报了这个异常
        Integer  status =(status1 ==null ||"".equals(status1)) ? null :Integer.parseInt(status1);

        String parkPetName = request.getParameter("parkPetName");//宠物名字
        String parkStartTime = request.getParameter("parkStartTime");//开始时间（String类型）
        String parkEndTime = request.getParameter("parkEndTime");//结束时间（String类型）
        String currentPageNo1 = request.getParameter("currentPageNo");//当前页(String类型)
        String pageSize1 = request.getParameter("pageSize");//页量(String类型)


        List<Park> parks = parkService.selectAllList(status,customerPhone, parkPetName, parkStartTime, parkEndTime, currentPageNo1, pageSize1);

        ResultVo<List<Park>> resultVo = new ResultVo<>();

        if (parks==null || "".equals(parks)){
            resultVo.setCode(500);
            resultVo.setMessage("失败");
            //返回数据给resultVo
            resultVo.setData(parks);
        }else{
            //（后端准备响应给前端的东西，都用resultVo对象来装载）
            resultVo.setCode(200);
            resultVo.setMessage("成功");
            resultVo.setData(parks);
        }
        /**  使用getWriter()，向浏览器写入内容(用于操作字符类型数据)
         *      获取输出流对象writer（该输出流对象只能操作字符串类型数据），
         *      用于向浏览器写入内容(用于操作字符串类型数据)
         *
         *      pw.write("小明")：在浏览器页面， 输出打印小明（普通方式）
         *      pw.print("小花")：在浏览器页面， 输出打印小明（以AJax的方式）
         */
                PrintWriter pw = response.getWriter();
                 JsonUtils.showJson(pw,resultVo);

    }

    //c5、增加数据
    public void  addPark(HttpServletRequest request,HttpServletResponse response) throws ParseException, IOException {
        //获取前端发送的请求携带的数据
        String parkPetName = request.getParameter("parkPetName");//宠物名字
        String parkPetType = request.getParameter("parkPetType");//宠物类型
        String parkStartTime = request.getParameter("parkStartTime");//开始时间（String类型）
        String parkEndTime = request.getParameter("parkEndTime");//结束时间（String类型）
        String parkStatus = request.getParameter("parkStatus");//用户id
        String parkMonitorId = request.getParameter("parkMonitorId");//监控时间
        String cId = request.getParameter("cId");//用户id


        //将从前端获取的页面的数据强转下
        // （前端发送的数据全部是json格式的字符串，所以需要强转）
        int cId1 = Integer.parseInt(cId);
        int parkMonitorId1 = Integer.parseInt(parkMonitorId);
        int parkStatus1 = Integer.parseInt(parkStatus);
        /** SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd")：
         *  创建一个date对象，用于指定日期的转换格式为：“yyyy-MM-dd”格式
         *
         *  a1：
         *      Date d = new Date()
         *      date.format(d):
         *          new Date()创建一个当前系统时间d
         *          将d以指定日期的格式为：“yyyy-MM-dd”进行转换
         *
         *  a2：
         *      String parkStartTime =2022.01.05
         *      Date parkStartTime1 = date.parse(parkStartTime);
         *              将日期字符串parkStartTime以指定日期的格
         *              式为：“yyyy-MM-dd”进行转换，转换
         *              成功后，它将变成Date类型
         *
         *
         */
        //创建一个date对象，用于指定日期的转换格式为：“yyyy-MM-dd”格式
        SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
        //将要转换的日期字符串parkStartTime转换成date时间格式，然后使用Date类型的parkStartTime1接收
        Date parkStartTime1 = date.parse(parkStartTime);
        Date parkEndTime1 = date.parse(parkEndTime);


        //实例化对象，并将前端发送过来的数据存储在park对象中
        Park park1 = new Park();
        park1.setV_id(cId1);
        park1.setM_id(parkMonitorId1);
        park1.setPark_status(parkStatus1);
        park1.setPark_endTime(parkEndTime1);
        park1.setPark_startTime(parkStartTime1);
        park1.setPark_pet_name(parkPetName);
        park1.setPark_pet_type(parkPetType);

        //执行sql语句（将前端发送过来的数据填入）
        int num = parkService.addPark(park1);
        //创建验证码集合，用来装随机生成的验证码
                ResultVo<Park> resultVo = new ResultVo<>();

                if (park1==null || "".equals(park1)){
                    resultVo.setCode(500);
                    resultVo.setMessage("失败");
                    //返回数据给resultVo
                    resultVo.setData(park1);
                }else{
                    //（后端准备响应给前端的东西，都用resultVo对象来装载）
                    resultVo.setCode(200);
                    resultVo.setMessage("成功");
                    resultVo.setData(park1);
                }
                PrintWriter pw = response.getWriter();

        /** 这边使用的是工具类的封装：JsonUtils
         *  目的：
         *      因为：响应给前端的数据必须为json格式的字符串数据
         *      所以：这边需要将响应给前端的数据强转为json格式的字符串
         *           所以使用这个工具类，将后端准备响应给前端的数据
         *           强转成json字符串格式
         *
         *      a1、没使用封装的代码情况是：
         *         //响应给前端的数据必须为json格式的字符串数据
         *         //所以这边需要将响应给前端的数据强转为json格式的字符串：
         *         //
         *         //      JSON.toJSONString(resultVo)
         *         //      将对象强转成json字符串格式
         *         String s = JSON.toJSONString(resultVo);
         *
         *         //在浏览器页面， 输出打印变量s
         *         pw.print(s);
         *         pw.flush();
         *         pw.close();
         *
         *      a2、使用封装后的代码情况：
         *          JsonUtils.showJson(resultVo,pw);
         *
         */
        //将后端响应给前端的数据强转为json字符串格式，并输出在浏览器中
        System.out.println(resultVo);
        JsonUtils.showJson(pw,resultVo);

    }


}
